#ifndef MUSICFILE_H
#define MUSICFILE_H
#include <QMediaMetaData>
#include <QUrl>
static inline QString default_null = "";
static inline qint64 default_int = 0;
class musicFile
{
public:
    // 默认构造函数
    musicFile() = default;
    // 带URL参数的构造函数，会自动解析音乐文件的元数据
    explicit musicFile(const QUrl &url);
    // 设置音乐ID
    void setMusicId(const QString &music_id);
    // 设置音乐名称
    void setMusicName(const QString &music_name);
    // 设置音乐歌手
    void setMusicSinger(const QString &music_singer);
    // 设置音乐专辑
    void setMusicAlbum(const QString &music_album);
    // 设置音乐时长
    void setMusicDuration(qint64 duration);
    // 设置是否喜欢状态
    void setIsLike(bool is_like);
    // 设置是否为历史播放状态
    void setIsHistory(bool is_history);
    // 设置音乐URL
    void setMusicUrl(const QUrl &music_url);
    // 设置歌词文件路径
    void setLrcFilePath(const QString &lrc_file_path);
    // 将音乐信息插入到数据库中
    void insertMusicToDB();

    // 获取音乐ID
    QString getMusicId() const;
    // 获取音乐名称
    QString getMusicName() const;
    // 获取音乐歌手
    QString getMusicSinger() const;
    // 获取音乐专辑
    QString getMusicAlbum() const;
    // 获取音乐时长
    qint64 getMusicDuration() const;
    // 获取是否喜欢状态
    bool getIsLike() const;
    // 获取是否为历史播放状态
    bool getIsHistory() const;
    // 获取音乐URL
    QUrl getMusicUrl() const;
    // 获取歌词文件路径
    QString getLrcFilePath() const;

private:
    // 解析媒体文件的元数据信息
    void parseMediaMetaData();

private:
    QString music_id_ = default_null;      // 为了保证歌曲的唯一性，需要给音乐添加id
    QString music_name_ = default_null;    // 音乐名称
    QString music_singer_ = default_null;  // 音乐歌手
    QString music_album_ = default_null;   // 音乐专辑
    qint64 duration_ = default_int;        //持续时长--long long
    bool is_like_ = false;                 // 是否收藏(是否喜欢)
    bool is_history_ = false;              // 是否为历史播放
    QUrl music_url_;                       // 音乐QUrl
    QString lrc_file_path_ = default_null; // 歌词文件路径
};

#endif // MUSICFILE_H
